home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / bbsutil / hsrc_117.zip / MOVEMESS.C < prev    next >
Text File  |  1990-11-27  |  6KB  |  189 lines

  1. #include "msgg.h"
  2. #include "twindow.h"
  3. #include "keys.h"
  4. #include "headedit.h"
  5. #include "headid.h"
  6.  
  7.  
  8.  
  9.  
  10. void pascal move_mess (void) {
  11.  
  12.     char message[6];
  13.     char toarea[5];
  14.     static char forward[2]="-";
  15.     static char carbon[2]="-";
  16.     static char carbon_to[36]="";
  17.     static char deleteorig[2]="Y";
  18.     char s[115];
  19.     char s1[303];
  20.     char temporary[30];
  21.     char temporary2[30];
  22.     char temporary3[40];
  23.     char origintext[80]="";
  24.     char far *hold;
  25.     char far *tempo;
  26.     word messlen;
  27.     word temp;
  28.     int returncode;
  29.     word tempmess;
  30.     word temparea;
  31.     struct ffblk f;
  32.     WINDOW *wnd;
  33.     FIELD *fld;
  34.  
  35.                     wnd=establish_window(4,maxy-7,11,62);
  36.                     set_border(wnd,3);
  37.                     set_title(wnd," Move/Forward/CC Message ");
  38.                     set_colors(wnd,BORDER,7,0,0);
  39.                     display_window(wnd);
  40.                     wcursor(wnd,0,0);
  41.                     wprintf(wnd," F10 to move or ESC to abort");
  42.                     sprintf(message,"%u",messno);
  43.                     if ((areano+1)<4096) sprintf(toarea,"%u",areano+1);
  44.                     else strcpy(toarea,"1");
  45.                     sprintf(s,"Message #(1-%u):",nomess);
  46.                     wprompt(wnd,1,2,s);
  47.                     wprompt(wnd,1,3,"To Area #:");
  48.                     wprompt(wnd,1,4,"Forward: [ ]");
  49.                     wprompt(wnd,1,5,"Carbon:  [ ]");
  50.                     wprompt(wnd,1,6,"Delete Original:");
  51.                     wprompt(wnd,1,7,"If carbon, to whom?");
  52.                     fld=establish_field(wnd,19,2,msk5,message,'N');
  53.                     field_window(fld,"movemess  ",40,6);
  54.                     fld=establish_field(wnd,19,3,msk5,toarea,'N');
  55.                     field_window(fld,"movearea  ",40,5);
  56.                     fld=establish_field(wnd,11,4,msk1,forward,'O');
  57.                     field_window(fld,"forward   ",40,4);
  58.                     fld=establish_field(wnd,11,5,msk1,carbon,'O');
  59.                     field_window(fld,"carbon    ",40,4);
  60.                     fld=establish_field(wnd,19,6,msk1,deleteorig,'A');
  61.                     field_window(fld,"deleteorig",40,3);
  62.                     field_validate(fld,yesorno);
  63.                     fld=establish_field(wnd,24,7,msk35,carbon_to,'a');
  64.                     field_window(fld,"carbonto  ",40,3);
  65.                     prep_template(wnd);
  66. Over:
  67.                     returncode=data_entry(wnd);
  68.                     if (returncode==ESC) {
  69.                         delete_window(wnd);
  70.                         return;
  71.                     }
  72.                     if (returncode!=F10) goto Over;
  73.                     rstrip(carbon_to);
  74.                     if(*carbon=='X' && !*carbon_to) {
  75.                         error_message(" Don't know who carbon's for! ");
  76.                         pause();
  77.                         goto Over;
  78.                     }
  79.                     temp=(word)atol(message);
  80.                     if (temp<1 || temp>nomess) {
  81.                         error_message(" Invalid message # ");
  82.                         pause();
  83.                         goto Over;
  84.                     }
  85.                     temp=(word)atol(toarea);
  86.                     if (temp<1 || temp>4095) {
  87.                         error_message(" Invalid area # ");
  88.                         pause();
  89.                         goto Over;
  90.                     }
  91.                     delete_window(wnd);
  92.                     tempmess=messno;
  93.                     temparea=areano;
  94.                     messno=(word)atol(message);
  95.                     get_mess(0);
  96.                     hold=get_text();
  97.                     if (hold==NULL || &hold==NULL) return;
  98.                     if (*deleteorig!='N') {
  99.                         msg.m_attr=msg.m_attr | MSGDELETED;
  100.                         put_mess();
  101.                         msg.m_attr = msg.m_attr & (~MSGDELETED);
  102.                     }
  103.                     msg.attr = msg.attr | MSGLOCAL;
  104.                     msg.m_attr = msg.m_attr & (~MSGPACKED);
  105.                     sprintf(temporary3,"%u: %1.12s",currarea->number,currarea->name);
  106.                     areano=(word)atol(toarea);
  107.                     nomess=check_area(areano);
  108.                     find_area();
  109.                     clear_message();
  110.                     if (tempo=strstr(hold,"\r * Origin: ")) *tempo=0;
  111.                     if(!tempo)if (tempo=strstr(hold,"\r\n * Origin: ")) *tempo=0;
  112.                     if (*forward=='X' || *carbon=='X') {
  113. /*                        while (*hold=='\01') memmove(hold,strchr(&hold[1],'\r')+1,strlen(strchr(&hold[1],'\r'))+1);
  114.                         tempo=hold;
  115.                         while ((tempo=strstr(tempo,"\r\01"))) memmove(tempo,strchr(&tempo[1],'\r'),strlen(strchr(&tempo[1],'\r'))+1);
  116.                         if (!strlen(hold)) {
  117.                             any_message(" Stripping kludge lines leaves an empty message! ");
  118.                             pause();
  119.                             if (hold) farfree(hold);
  120.                             goto EndIt;
  121.                         }
  122. */
  123.  
  124.                         if ((msg.m_attr & NET) || (msg.m_attr & ALTERNATE)) {
  125.                             sprintf(temporary2,"(%u:%u/%u.%01u) ",msg.d_zone,msg.dest_net,msg.dest,msg.d_point);
  126.                             sprintf(temporary,"(%u:%u/%u.%01u) ",msg.o_zone,msg.orig_net,msg.orig,msg.o_point);
  127.                         }
  128.                         else {
  129.                             *temporary=0;
  130.                             *temporary2=0;
  131.                         }
  132.                         msg.m_attr = msg.m_attr & (~MSGSCANNED);
  133.                         msg.m_attr = msg.m_attr & (~MSGNET);
  134.                         msg.m_attr = msg.m_attr & (~MSGECHO);
  135.                         msg.o_zone=curaddress.zone;
  136.                         msg.orig_net=curaddress.net;
  137.                         msg.orig=curaddress.node;
  138.                         if ((currarea->attr & NET) || (currarea->attr & ALTERNATE)) {
  139.                             msg.attr=(defaultattr | MSGLOCAL) & (~MSGSENT);
  140.                             msg.m_attr = msg.m_attr | MSGNET;
  141.                         }
  142.                         if ((currarea->attr & ECHO) || (currarea->attr & ALTECHO)) {
  143.                             msg.m_attr = msg.m_attr | MSGECHO;
  144.                             if(curaddress.point)sprintf(origintext,"%s%s%s (%u:%u/%01u.%01u)\r",HEADID,ORIGTXT,origin,curaddress.zone,curaddress.net,curaddress.node,curaddress.point);
  145.                             else sprintf(origintext,"%s%s%s (%u:%u/%01u)\r",HEADID,ORIGTXT,origin,curaddress.zone,curaddress.net,curaddress.node);
  146.                         }
  147.                         if ((currarea->attr & PUBLIC) && (!(currarea->attr & PRIVATE))) {
  148.                             msg.attr = msg.attr & (~MSGPRIVATE);
  149.                         }
  150.                         if ((!(currarea->attr & PUBLIC)) && (currarea->attr & PRIVATE)) {
  151.                             msg.attr = msg.attr | MSGPRIVATE;
  152.                         }
  153.                         if(*forward=='X') {
  154.                             sprintf(s,"\r ** Forwarded on %s from Area #%s **",fidodate(),temporary3);
  155.                             sprintf(s1,"\r ** by %s via XBBS (%u:%u/%u.%01u@%s) **\r ** Orig. to: %s %s**\r ** Orig. fm: %s ",name,curaddress.zone,curaddress.net,curaddress.node,curaddress.point,curaddress.domain,msg.to,temporary2,msg.from);
  156.                             strcat(s1,temporary);
  157.                             strcat(s1," **\r\r");
  158.                         }
  159.                         else {
  160.                             sprintf(s," ** Original to %s (%s)\r",msg.to,temporary);
  161.                             sprintf(s1," ** CC: %s\r",carbon_to);
  162.                         }
  163.                     }
  164.                     else {
  165.                         *s=0;
  166.                         *s1=0;
  167.                     }
  168.                     messlen=put_text(hold,s,s1,&f,origintext);
  169.                     if (hold) farfree(hold);
  170.                     if (!messlen) goto EndIt;
  171.                     messno=++nomess;
  172.                     msg.length=messlen;
  173.                     msg.start=f.ff_fsize;
  174.                     if (*forward=='X') {
  175.                         if (currarea->attr & ECHO) msg.m_attr = msg.m_attr | MSGECHO;
  176.                         msg.m_attr = msg.m_attr & (~MSGSCANNED);
  177.                     }
  178.                     edit_mess(2);
  179.                     put_mess();
  180. EndIt:
  181.                     areano=temparea;
  182.                     nomess=check_area(areano);
  183.                     find_area();
  184.                     messno=tempmess;
  185.                     get_mess(0);
  186.                     clear_message();
  187. }
  188.  
  189.